#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>

#include "pr_exit.h"


static void print_err(char *str){
    if (str) {
        printf("%s", str);
        exit(0);
    }
}


int main() {
    pid_t pid;
    int status;

    if ((pid = fork()) < 0) {
        print_err("fork error");
    }
    else if (pid == 0) { // 子进程
        exit(7);
    }

    if (wait(&status) != pid) // 等待子进程终止, 并获取终止状态
        print_err("wait error");
    pr_exit(status); // 打印终止状态


    if ((pid = fork()) < 0) {
        print_err("fork error");
    }
    else if (pid == 0)
        abort(); // 生成SIGABRT信号

    if (wait(&status) != pid) {
        print_err("wait err");
    }
    pr_exit(status);
    if ((pid = fork()) < 0) {
        print_err("fork error");
    }
    else if(pid == 0)
        status /= 0; // 除以0产生SIGFPE信号

    if (wait(&status) != pid) {
        print_err("wait error");
    }
    pr_exit(status);

    return 0;
}

